"""
闭包函数

闭包函数：就是在函数中嵌套函数，即使外部函数执行完成后，内部函数仍然可以访问外部函数定义的局部变量。
特点：对数据有保存状态，

构建闭包函数必须满足的条件：
 ① 函数必须有一个嵌套函数，也就是说定义函数时，在内部在定义一个函数
 ② 内部函数必须引用外部函数的变量，如果需要修改变量，必须用关键字 nonlocal 声明
 ③ 外部函数的返回值必须是内部函数名

创建闭包函数对象
  闭包函数对象 = 外部函数('实参')
"""


# 案例：创建一个计数器
def create_count(count=0):
    ''' 定义一个函数，count初始值为 0'''

    def counter():
        nonlocal count  # 声明 count 变量，修改
        count += 1  # 改变外部函数的变量
        return count

    return counter  # 注意，外部函数返回内部函数的名称，千万不要加小括号


# 创建闭包函数，
count_num = create_count(2)  # count_num 函数对象
print(count_num())  # 调用时必须添加 ()
